Dataloader を使って高速に大量データを更新/エクスポートしたい
https://gyazo.com/b969c158108de82ee2c14d92592645c0
Salesforce の Dataloader、使ってますか?利用シーンとしてはやはり大量のデータを扱う時だと思います。扱うデータ量が数千件だったら別にデフォルトの設定でも特に問題はありません。しかし、これが 10万件 とか 20万件、それ以上のオーダになってくると、遅くて遅くてどうしようもない!という状態が発生することがあります。そんな時は設定をデフォルトからちょいといじれば爆速になる場合もあるので、設定例と検証した結果をメモに残しておきます。 大量のデータを Insert, Update, Upsert する
Bulk API つかう, Batch size 変更する (default 200, max 2000)
検証 時間は環境に依存するため適当
batch size 200 に固定し、SOAP API と Bulk APIで検証
SOAP API を使った場合、10万件 の Upsert に 5分 くらい (体感)
Bulk API を使った場合、10万件 の Upsert に 1分 くらい (体感)
BULK と SOAP の違い
// 図を書きたい
Bulk API は並列非同期。SOAP API は直列同期。でも Bulk でもオプションで直列にできる。
Bulk は並列故にエラーがおきやすい。具体的には主従関係にあるオブジェクトの子レコードを更新した時には親レコードをロックする仕様があるので、同じ親を持つ複数の子レコードを更新しようとしたときに排他ロックエラーになる。
Bulk API はファイルを一括ドンするからネットワークリソースが節約できる。
SOAP API はリソースをバッチサイズ毎に区切ってアップロード。
Bulk API は物理削除もできる(ゴミ箱に入らない削除)
Bulk API の物理削除には権限が必要。システム管理者でもなぜかデフォルトはオフ。だから権限セット作って割り当てると良いかも。
大量のデータを Export する
Export には SOAP を利用するしかない (Bulk なんてものはありません) 追記
bulk、ありました。。。2018年末くらいに実装されたみたいです。まだ触ってないので要検証。PK Chunk を使ってるみたいです。あとで検証したら書く。
Query request size を変更する(default 500, max 2000)
検証
Query request size 500 で 10万件 のエクスポートに 45秒 くらい
Query request size 2000 で 10万件 のエクスポートに 25秒 くらい
あんま変わらんね
参考:Dataloader の設定画面
https://gyazo.com/7b9371fcd0c0bc077e01cc8288c87be0
以上。